//
// Created by bleedingfight on 2020/6/10.
//

#include "MyCircularQueue.h"
MyCircularQueue::MyCircularQueue(int k) {
    queue = new int[k];
    head = 0;
    tail = 0;
    size = k;
}
bool MyCircularQueue::enQueue(int value) {
    if(!isFull()){
        queue[tail] = value;
        count++;
        tail = (tail+1)%size;
        return true;
    }else{
        return false;
    }

}
bool MyCircularQueue::deQueue() {
    if(!isEmpty()){
        head=(head+1)%size;
        count--;
        return true;
    }
    return false;
}
int MyCircularQueue::Front() {
    if(!isEmpty())
        return queue[head];
    else
        return -1;
}
bool MyCircularQueue::isEmpty() {
    return count == 0;
}
bool MyCircularQueue::isFull() {
    return count==size;
}


int MyCircularQueue::Rear() {
    if(!isEmpty()){
        //循环队列，当tail指向的不是最后一个元素的时候意味着tail指向队列的前面，这是返回tail前面的元素，否则返回最后一个元素
        int temp = tail == 0?(size-1):tail-1;
        return queue[temp];
    }
    return -1;
}
MyCircularQueue::~MyCircularQueue() {
    delete [] queue;
}